Excelに新関数LET()追加。正式版として一般公開 43
ストーリー by nagazou
ニュー関数 部門より
ニュー関数 部門より
Microsoftが3月に発表していた Excelの新関数「LET()」が16日、正式版として一般公開された(LET Generally Available、窓の杜)。
LETは同じ部分式が繰り返し登場するような場合、計算結果に名前を割り当て変数として再利用可能にするというもの。可読性の向上などが期待できる。Office365またはMicrosoft365で利用可能となっている。バージョンはWindowsでは2009(ビルド13231.20262)、Mac OSでは16.42(20101102)になっている場合に使用可能となる。
LETは同じ部分式が繰り返し登場するような場合、計算結果に名前を割り当て変数として再利用可能にするというもの。可読性の向上などが期待できる。Office365またはMicrosoft365で利用可能となっている。バージョンはWindowsでは2009(ビルド13231.20262)、Mac OSでは16.42(20101102)になっている場合に使用可能となる。
窓の杜の例だと (スコア:3)
Re:窓の杜の例だと (スコア:1)
短くではなく分かりやすく書く富豪的プログラミングなので良いのでは。
変数名短くしたり条件直接指定したりすれば利用しない場合より短くなるし。
可読性の向上などが期待できる。
Re:窓の杜の例だと (スコア:2)
確かに。
窓の杜の例だと「“変数”を使って可読性と計算速度をアップ」ってタイトルですからね。
短く記述できることを念頭には置いていない記事と思われます。
Re: (スコア:0)
短いほうが絶対に可読性が上とも限るまい。
例文見た自分はどっちも「うわぁ、読みたくねぇ……」でしたが。
せめて改行必須にしてほしい。
Re: (スコア:0)
ExcelのUIだと長いと途端に可読性落ちるから、短いのは通常のプログラミング言語より意味がある。
Re: (スコア:0)
最初の図や例が、name_valueにリテラルしかないから勘違いしそう
BASICだと (スコア:2)
代入文だね。
#ジジイですら知っている人がどこまでいるのか…
Re:BASICだと (スコア:1)
Re:BASICだと (スコア:2)
下手するとリスト表示で出てくれなかったりするらしい。(内部表現で消されてしまう)
欲しいと思ってた (スコア:1)
sum(ほげほげ)で出した合計値が100を越えていれば100に丸めて、そうじゃなければそのままの値、とやりたいときに、同じsum()を2回含むセルを作るか、別のセルにsum()の結果を入れて隣に100以下に丸めたセルを作るか、と面倒くさかったので。
min(sum(ほげほげ), 100) でも良いんだけど、この書き方、1/2以上の確率で、max(sum(ほげほげ), 100) と書き間違える…。
let(s, sum(ほげほげ), if(s > 100, 100, s)) の方が何も考えずに書けて楽そう。
Re: (スコア:0)
10 let a=10
Re: (スコア:0)
BASICですか。
何もかも懐かしい・・・
Re: (スコア:0)
N-BASICなんかLETは省略可能なんでほぼ見かけませんでしたね
必須の処理系ってとても少なかったと思います
Re:欲しいと思ってた (スコア:2)
というか、書いたほうが不利になる罠だったような。
プログラム容量も増えるし速度も遅くなるという。
Re:欲しいと思ってた (スコア:1)
>プログラム容量も増えるし速度も遅くなるという。
どの関数を使うと実行時に何単位の処理時間だとか記憶域とか
そういうのを気にしないでどんどん使いましょうというのが
元々の発想だったから気にしたら負け?
// 偶整数除算よりも右シフト演算の方がコストが安いという選択とは別世界。
Re: (スコア:0)
sum(ほげほげ)で出した合計値が100を越えていれば100に丸めて、そうじゃなければそのままの値、とやりたいときに、同じsum()を2回含むセルを作るか、別のセルにsum()の結果を入れて隣に100以下に丸めたセルを作るか、と面倒くさかったので。
良きに計らうならこうすればいいんですよ
Let it be...
# 終わりは近い
Re: (スコア:0)
1/3の確率で
let(s, sum(ほげほげ), if(s < 100, 100, s))と書き間違え、
1/3の確率で
let(s, sum(ほげほげ), if(s > 100, s, 100))
Re: (スコア:0)
>min(sum(ほげほげ), 100) でも良いんだけど、この書き方、1/2以上の確率で、max(sum(ほげほげ), 100) と書き間違える…。
>
>let(s, sum(ほげほげ), if(s > 100, 100, s)) の方が何も考えずに書けて楽そう。
100が2箇所に出てきてメンテナンス性が悪くなるだけ。
自分が何を書きたいのか考えようとしないのは、責任放棄だよ。
Re: (スコア:0)
100点満点以外で成績を付けることってないのでな
Re: (スコア:0)
どんな科目の成績を付けてるのかね
Re: (スコア:0)
普段プログラムを組まない人はそう考えるんだ。興味深い。
プログラマだと、この内容ならほとんどが"min"の方を選ぶと思う。
Re: (スコア:0)
minも集中して練習でもしたら慣れられるもんなのか。
競技プログラミングの類に興じたり、その手の検定で上級を余裕で取れたりするけど、それでも、20年来間違い続けてる。
min使うと毎回、間違うんだよね、とちょっと手を止めて考えながら書いてもやっぱり逆になってたり。あまりに間違うから避ける→いつまで経っても慣れない、の悪いループに陥ってるかな。
Re: (スコア:0)
元々が、英語のMinimumとMaximumですし、そこを覚えれば…暗記物なのは大差無いか…。
入力後に毎回検算するとか、入力時の関数説明+インテリセンス用のポップアップで機能を確認するとかはどうでしょうか?
Re: (スコア:0)
max=100にするためにmin()を使うから混乱するという話でしょ。
この流れでいくと、次はキーワード引数のサポートか?
Re: (スコア:0)
=if(sum(ほげほげ)>100,int(sum(ほげほげ)),sum(ほげほげ))
Re:欲しいと思ってた (スコア:1)
それぐらいだったら、条件付き書式でできますね。
セル値は「=sum(ほげほげ)」で、書式を「[>100]0;0.00」に。
その数値をさらに別のセルが参照する可能性を考えると、セル値そのものを切り詰めるのではなく、内部的にはそのまま保持して表示だけいじる方が好みです。
(元々正/ゼロ/負での表示切り替えの機能なので)書式を3パターンまでしか切り替えることができないのが欠点。
書式を「[>100]"100";0」にすれば、元コメの「合計値が100を越えていれば100に」ってのも実現できますが、これはセル参照すると全然別の数値になるので一長一短かなぁ。
Re: (スコア:0)
>セル値は「=sum(ほげほげ)」で、書式を「[>100]0;0.00」に。
これはEXCELでいう条件付き書式じゃないよ。
通常の書式設定内の条件付け。
EXCELでいう条件付き書式は「ホーム」-「スタイル」-「条件付き書式」
書式設定よりも細かいことが可能。
元の値は変わらず、表示だけ変更というのは同じだけど。
Re:欲しいと思ってた (スコア:1)
おっと、そうでした。
今回私が紹介した、通常の書式の中に条件を入れるものは、マイクロソフト曰く「条件付きの書式」 [microsoft.com]です。名前が紛らわしい…
ハックしてやる (スコア:0)
LET(hoge, fuga,
fuga, "なんか",
hoge) //エラー
名前宣言前では参照できないのね
なんかいたずらしてやろうと思ったけどうーむ…
let(head, {1,0}, tail, {0,1}, …)←こういう単位配列的なものに名前つけて意味わかりやすくしてやるのには結構便利でした。
可読性がよくなるということは (スコア:0)
if(iserror(○○),"",○○)みたいに同じこと2回書かないとダメなのが無くなるのかな?
Re: (スコア:0)
その例なら IFERROR 使えばよいのでは。
エラーにしか使えないけど。
Re: (スコア:0)
iferror知らなかったありがとう!
Re: (スコア:0)
ちょっと前にはifzeroも出来ましたよ!
Excelヘルプの類似・関連関数リンク欄は割とオススメ。
その手の便利関数がない場合は、元コメの様にletを使うのが良さそうですね。
そんなモノより (スコア:0)
セル結合を禁止する機能をください。
Re: (スコア:0)
純表計算向けExcelを方眼紙向けExcelと分離しましょう
使い回しで製品が増えるので、MSも大喜び
Re: (スコア:0)
ピボットテーブルでもセル結合使われてるよ。
Re: (スコア:0)
ピボットテーブルでもセル結合使われてるよ。
アウトプットに使うのは可。
インプットとして使われる表にセル結合するのは重罪。
Re: (スコア:0)
それ以前に(マルチプランには実装されていた)純十進演算オプションだろ。
Re: (スコア:0)
じゃあ、代わりに行、列にレイヤーの要素を追加して三次元に対応しよう
Re: (スコア:0)
これ、たまに欲しいときがある。
縦横表の年度別推移を見たい時とか。
UIをどうするかが問題だけど。
LAMBDAマダー (スコア:0)
いやエクセルでLet over Lambdaはやりたくない
let it... (スコア:0)
let(it,5)